import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.*;
/**
 * Clase WorldFish: creacion de los niveles, regresa referencias a los 
 * diferentes contadores uilizados en el juego, checa si ya es momento 
 * de cambiar de nivel, borra el nivel anterior.
 * 
 * @author Vianey Ortiz
 * @version 05/12/2012
 */
public class WorldFish extends World
{
    private Contador cont;
    private Contador vid;
    private Tiempo tiempo;
    private Letrero mnsj; 
    private Creditos cred = new Creditos();
    private Ayuda help = new Ayuda();
    private Juego game = new Juego();
    private MenuBot mb = new MenuBot();
    private int nivel;
    /**
     * Constructor for objects of class WorldFish.
     * Inicializacionde la Pantalla de juego 
     * Se manda llamar a Menu
     */
    public WorldFish()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(800, 500, 1); 
        menu();
    }
    /**
     * Llamada a mouse para comenzar el juego
     */
    public void act()
    {
        mouse();
    }
    
    /**
     *Checa en que que objeto se da click y cual es la 
     *accion a realizar, remueve los Objetos anteriores
     *y carga nuevos escenarios.
     */
    public void mouse()
    {
        if(Greenfoot.mouseClicked(game))
        {
            super.removeObjects(getObjects(null));
            nivel=1;
            nivel1();
            Greenfoot.start();
        }
        else if(Greenfoot.mouseClicked(cred))
        {
            super.removeObjects(getObjects(null));
            setBackground("CreditosBot.gif");
            addObject(mb,700,400);
        }
        else if(Greenfoot.mouseClicked(help))
        {
            super.removeObjects(getObjects(null));
            setBackground("AyudaBot.gif");
            addObject(mb,700,400);
        }
        else if(Greenfoot.mouseClicked(mb))
        {
            menu();            
        }
    }
    
    /**
     * Prepare the world for the start of the program. That is: create the initial
     * objects and add them to the world.
     * Nivel 1
     */
    public void nivel1()
    {
        incializa(nivel);
        cont = new Contador(0,"Pecesitos: ");
        addObject(cont,80,20);
        vid= new Contador(3,"Vidas: ");
        addObject(vid,300,20);
        tiempo= new Tiempo(30);
        addObject(tiempo, 700,20);
    }
    /**
     * Escenario Nivel 2
     */
    private void nivel2(int nvidas)
    {
        incializa(nivel);
        cont = new Contador(0,"Pecesitos: ");
        addObject(cont,80,20);
        vid= new Contador(nvidas+1,"Vidas: ");
        addObject(vid,300,20);
        tiempo= new Tiempo(60);
        addObject(tiempo, 700,20);
        Greenfoot.start();
    }
    
    /**
     * Escenario Nivel 3
     */
    private void nivel3(int nvidas)
    {
        incializa(nivel);
        cont = new Contador(0,"Pecesitos: ");
        addObject(cont,80,20);
        vid= new Contador(nvidas+1,"Vidas: ");
        addObject(vid,300,20);
        tiempo= new Tiempo(90);
        addObject(tiempo, 700,20);    
        Greenfoot.start();
    }
    
    /** 
     * Inicializar los botones 
     * encargados del menú
     */
    public void menu()
    {
        super.removeObjects(getObjects(null));
        setBackground("FondoIni.png");
        Greenfoot.start();
        addObject(game,200,207);
        addObject(help,365,300);
        addObject(cred,520,420);
        Greenfoot.start();
    }
    
    /**
     * Regresa una refencia al contador
     * @return Contador
     */
    public Contador regresaContador()
    {
        return cont;
    }    
    
    /**
     * Regresa una refencia al contador de vidas
     * @return Contador
     */
    public Contador regresaVidas()
    {
        return vid;
    }
    
    /**
     * Checa si ya se comio el total de peces requeridos para 
     * avanzar de nivel, muestra el letrero de que cambio de nivel
     * y manda llamar al siguiente nivel, 
     * @parameters Variable entera totpcs con el numero d peces que se ha comido el jugador
     * @parameters Variable entera niv con el nivel en el cual se esta jugando en ese momento 
     *      para validar correctamente los peces.
     */
    public void checaNivel(int totpcs)
    {
        if(totpcs==5 && nivel==1)
        {            
            Greenfoot.stop();   
            mnsj = new Letrero("  N I V E L   2");
            addObject(mnsj,350,100);
            int nvid;
            vid=regresaVidas();
            nvid=vid.decrementa();
            remueveObjetos();
            nivel=2;
            nivel2(nvid); 
            Greenfoot.start();
        }
        else if(totpcs==10 && nivel==2)
        {
            Greenfoot.stop();
            mnsj = new Letrero("  N I V E L    3");
            addObject(mnsj,350,100); 
            int nvid;
            vid=regresaVidas();
            nvid=vid.decrementa();
            remueveObjetos();
            nivel=3;
            nivel3(nvid);
            Greenfoot.start();
        }
        else if(totpcs==15 && nivel==3)
        {
            Greenfoot.stop();
            mnsj = new Letrero("  J U E G O ");
            addObject(mnsj,350,100);
            mnsj = new Letrero("  T E R M I N A D O  ");
            addObject(mnsj,400,235);
            menu();
        }
    }
    
    /**
     * Remueve cada clase de objetos 
     * que se agrego al mundo.
     */
    public void remueveObjetos()
    {
        List enemi=getObjects(Enemigo.class);
        List qoral=getObjects(Coral.class);
        List comid=getObjects(Comida.class);
        List tiem=getObjects(Tiempo.class);
        List let=getObjects(Letrero.class);
        List cont=getObjects(Contador.class);
        
        removeObjects(enemi);
        removeObjects(qoral);
        removeObjects(comid);
        removeObjects(tiem);
        removeObjects(let);
        removeObjects(cont);
    }
    
    /**
     * Inicializa los actores del mundo
     * @param int nivel
     */
    public void incializa(int nivel)
    {
        setBackground("Fondo.jpg");
        //Aqui se agregan los anzuelos
        Anzuelo anzuelo = new Anzuelo(nivel);
        addObject(anzuelo, 180, 3);
        Anzuelo anzuelo2 = new Anzuelo(nivel);
        addObject(anzuelo2, 389, 50);
        Anzuelo anzuelo3 = new Anzuelo(nivel);
        addObject(anzuelo3, 658, 43);
        //Agregamos la comida
        Comida1 comida1 = new Comida1();
        addObject(comida1, 41, 23);
        Comida1 comida12 = new Comida1();
        addObject(comida12, 138, 129);
        Comida1 comida13 = new Comida1();;
        addObject(comida13, 254, 23);
        Comida1 comida14 = new Comida1();
        addObject(comida14, 428, 142);
        Comida1 comida15 = new Comida1();
        addObject(comida15, 541, 73);
        Comida1 comida16 = new Comida1();
        addObject(comida16, 739, 141);

        Comida2 comida2 = new Comida2();
        addObject(comida2, 68, 102);
        Comida2 comida22 = new Comida2();
        addObject(comida22, 289, 107);
        Comida2 comida23 = new Comida2();
        addObject(comida23, 579, 153);
        Comida2 comida24 = new Comida2();
        addObject(comida24, 746, 75);
        Comida2 comida25 = new Comida2();
        addObject(comida25, 430, 21);

        Comida3 comida3 = new Comida3();
        addObject(comida3, 602, 27);
        Comida3 comida32 = new Comida3();
        addObject(comida32, 337, 58);
        Comida3 comida33 = new Comida3();
        addObject(comida33, 106, 57);
        Comida3 comida34 = new Comida3();
        addObject(comida34, 646, 111);
        Comida3 comida35 = new Comida3();
        addObject(comida35, 237, 135);

        Comida4 comida4 = new Comida4();
        addObject(comida4, 699, 41);
        Comida4 comida42 = new Comida4();
        addObject(comida42, 461, 89);
        Comida4 comida43 = new Comida4();
        addObject(comida43, 335, 149);
        Comida4 comida44 = new Comida4();
        addObject(comida44, 196, 59);
        Comida4 comida45 = new Comida4();
        addObject(comida45,45, 152);

        Tiburon tiburon = new Tiburon();
        addObject(tiburon, 153, 217);

        if (nivel == 1)
        {
            Pez pez = new Pez();
            addObject(pez, 700, 400);
        }
        
        Coral coral = new Coral();
        addObject(coral, 777, 446);
        Coral coral2 = new Coral();
        addObject(coral2, 732, 448);
        Coral coral3 = new Coral();
        addObject(coral3, 58, 425);
        Coral coral4 = new Coral();
        addObject(coral4, 118, 430);
        Coral coral5 = new Coral();
        addObject(coral5, 174, 427);
        
        if(nivel==2)
        {
            Lancherito lancherito = new Lancherito();
            addObject(lancherito,40,10);
            Pulpo pulpo = new Pulpo();
            addObject(pulpo,600,100);
        }
        
        if(nivel==3)
        {
            Lancherito lancherito = new Lancherito();
            addObject(lancherito,40,10);
            Pulpo pulpo = new Pulpo();
            addObject(pulpo,600,100);
            Ballena ballena= new Ballena();
            addObject(ballena,400,200);
        }
    }
}
   